package com.cskaoyan.javase.oop3._3inner._3loacl._1basic;

/**
 *
 * 局部内部类的访问特点:
 * 局部内部类的访问特点，我们仍然主要从以下几个角度研究：
 * 1. 局部内部类内部访问外围类
 *      可以访问
 *      而且如果是在外围类的成员方法中的局部内部类,持有了外围类对象的引用,它可以直接访问外围类成员
 *          如果有同名成员,this指向局部内部类自身对象,外围类类名.this指向外围类对象
 *      如果是在外围类的静态成员方法中的局部内部类,不持有外围类对象,那么想要访问就要创建对象.
 *      而且,这些访问都不受权限限制.
 *
 * 2. 外围类访问局部内部类成员
 *      只有装局部内部类的方法或者作用域,才能够访问该局部内部类,也不受权限限制.
 *      创建局部内部类的对象,然后访问即可
 *      其他位置一概访问不到.
 *
 * 3. 外部类访问局部内部类成员
 *      不能!外部类无法直接访问局部内部类
 *
 * 4. 局部内部类访问外部类成员
 *      可以,但是需要创建对象,也受权限限制
 *
 * @since 11:12
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo {
}

class EnclosedClazz {
    int a;
    private int b = 10;
    static int c = 20;
    static final int D = 30;

    public void test() {
        class Inner {
            int a;
            private int b = 100;
            public void testInner(){
                System.out.println(a);
                System.out.println(b);
                System.out.println(EnclosedClazz.this.a);
                System.out.println(EnclosedClazz.this.b);
                System.out.println(EnclosedClazz.c);
                System.out.println(EnclosedClazz.D);
            }
        }
        Inner i = new Inner();
        System.out.println(i.b);
    }

    public static void testStatic() {
        class Inner {
            public void testInner(){
                EnclosedClazz ec = new EnclosedClazz();
                System.out.println(ec.a);
                System.out.println(ec.b);
            }
        }
        Inner i = new Inner();
    }
}